package com.kexio.core.security.annotation;

import java.lang.annotation.*;

/**
 * 角色要求注解
 * 用于标记方法或类需要特定角色才能访问
 *
 * @author Kexio Team
 * @since 1.0.0
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequiresRole {

    /**
     * 需要的角色标识
     * 支持多个角色，默认为AND关系
     *
     * @return 角色标识数组
     */
    String[] value();

    /**
     * 角色检查的逻辑关系
     * AND: 需要拥有所有指定角色
     * OR: 需要拥有任意一个角色
     *
     * @return 逻辑关系
     */
    Logical logical() default Logical.OR;

    /**
     * 权限检查失败时的错误消息
     * 如果为空，使用默认错误消息
     *
     * @return 错误消息
     */
    String message() default "";

    /**
     * 是否禁用角色检查
     * 用于临时禁用某个角色检查，方便调试
     *
     * @return 是否禁用
     */
    boolean disabled() default false;

    /**
     * 逻辑关系枚举
     */
    enum Logical {
        /**
         * AND关系：需要拥有所有指定角色
         */
        AND,
        
        /**
         * OR关系：需要拥有任意一个角色
         */
        OR
    }
}
